In der CSV-Datei stecken alle Commits aller GitHub-Repositories, welche ein bestimmtes GitHub-Repository geforkt haben. Diese Daten habe ich per GitHub-API gezogen (das gleiche ginge auch mit einer Reihe von normalen Git-Repositories).
Beim ursprünglichen Repository (https://github.com/authman/DAT210x) handelt es sich um den Code eines Data-Science-Kurses, welche alle paar Wochen gefordert hatte, zu einem bestimmten Zeitpunkt Übungen abzugeben (Achtung: Abgabe über ein Web-Formular, nicht als Commit! Daher ist folgende Analyse nicht 100%ig richtig modelliert).
In [1]:
import pandas as pd
csv_data = pd.read_csv("commits_of_all_repos.csv")
csv_data.head()
Out[1]:
In [2]:
%matplotlib inline
csv_data['commit.author.date'] = pd.to_datetime(csv_data['commit.author.date'])
csv_data = csv_data[csv_data['author.login'] != "authman"]
commits_per_time = csv_data.set_index('commit.author.date').resample("D").count()
commits_per_time.head()
Out[2]:
Aber hier zeige ich nur skizzenhaft, was mit den Daten angestellt werden könnte. Ich erstelle eine Grafik mit der Anzahl der Commits (blaue Linie) sowie den (geschätzten) Abgabeterminen (rote, vertikale Linien) innerhalb des Kurszeitraums.
Damit ist grob ersichtlich, wann die Studierenden an ihren Aufgaben erledigt haben.
In [3]:
import matplotlib.pyplot as plt
course_end = pd.Timestamp("Sep 30, 2016")
course_start = course_end - pd.DateOffset(weeks=6)
dates = pd.date_range(course_start, course_end, freq="2W", closed="right")
exam_time = commits_per_time[commits_per_time.index <= course_end]
fig, ax = plt.subplots()
ax = exam_time['url'].plot()
for date in dates:
ax.axvline(date, color="red", alpha=0.3)
ax.axvline(course_end, color="red")
plt.show()
Die Daten sowie der Diagrammtyp passen derzeit noch nicht so recht zusammen (hatte ich auf die Schnelle nicht hinbekommen), aber für eine erste Ideenskizze sollte das ausreichen.